/************************************************************************

								Heroes IV
					  Copyright 2000, The 3DO Company

	------------------------------------------------------------------
  						       hero_keyword_replacer.h

	$Header: /game/hero_keyword_replacer.h $

	$NoKeywords: $

 ************************************************************************/

#ifndef HERO_KEYWORD_REPLACER_H_INCLUDED
#define HERO_KEYWORD_REPLACER_H_INCLUDED

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

// kill the 255+ character identifier warning.  Templates tend to exceed that easily.
#pragma warning( disable: 4786 )

#include <vector>
#include "keyword_replacer.h"

class t_abstract_creature;
class t_abstract_grail_data_source;
class t_artifact;
class t_artifact_list;
class t_creature_array;
class t_hero;
struct t_skill;
enum  t_spell;

class t_hero_keyword_replacer : public t_keyword_replacer
{
public:
	t_hero_keyword_replacer();

	void		 add_artifact( t_artifact const& artifact );
	void		 add_artifacts( t_artifact_list const& artifacts );
	void         add_creatures( t_creature_array const& creatures, bool approximate );
	virtual void add_material( int amount, t_material material );
	void		 add_hero( t_hero const* hero );
	void		 add_heroes( std::vector<t_hero*> const& heroes );
	void		 add_skill( t_skill const& skill );
	void		 add_spell( t_abstract_creature const* creature, t_spell spell,
							t_artifact const* artifact = 0 );
	void		 add_spell( t_abstract_creature const* creature, t_spell spell,
							t_abstract_grail_data_source const & grail_data,
							t_artifact const* artifact = 0 );
protected:
	int m_hero_count;
	int m_artifact_count;
	int m_skill_count;
	int	m_spell_count;
};

inline t_hero_keyword_replacer::t_hero_keyword_replacer()
{
	m_hero_count = 0;
	m_artifact_count = 0;
	m_spell_count = 0;
	m_skill_count = 0;
}

#endif // HERO_KEYWORD_REPLACER_H_INCLUDED